import { createRouter, createWebHashHistory } from 'vue-router'
import routes from './routes'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import pinia from '@/store'
import useUserStore from '@/store/modules/user'
import { ElMessage } from 'element-plus'

// 关闭右侧旋转圈
NProgress.configure({ showSpinner: false })

const userStore = useUserStore(pinia)

const router = createRouter({
	// 路由模式
	history: createWebHashHistory(),
	// 路由信息
	routes,
	// 滚动行为
	scrollBehavior() {
		// 始终滚动到顶部
		return {
			top: 0,
		}
	},
})

// 全局路由守卫 - 全局前置路由守卫
router.beforeEach(async (to, from, next) => {
	// 进度条开始
	NProgress.start()
	// to：即将进入的目标路由对象
	// from：当前导航正要离开的路由对象
	// next：一个函数，表示放行

	let token = userStore.token

	// token存在表示用户登录状态
	if (token) {
		// 已登录想去登录页 -- 强制跳转到首页
		if (to.path === '/login') {
			next('/')
		}
		// 已登录想去其他页面
		else {
			// 判断是否存在用户信息
			if (userStore.username) {
				next()
			}
			// 没有用户信息
			else {
				try {
					// 获取用户信息成功 -- 放行
					await userStore.getUserInfo()
					next()
				} catch (error) {
					// 获取用户信息失败 -- token过期
					// 清除信息
					userStore.logout()
					ElMessage({
						type: 'error',
						message: '登录信息已过期，请重新登录',
					})
					// 重新登录
					next({ path: '/login', query: { redirect: to.path } })
				}
			}
		}
	}
	// 用户未登录
	else {
		// 未登录状态下，去登录页 -- 放行
		if (to.path === '/login') {
			next()
		}
		// 未登录状态下，去其他页面 -- 跳转到登录页
		else {
			next({ path: '/login', query: { redirect: to.path } })
		}
	}
})

// 全局路由守卫 - 全局后置路由守卫
router.afterEach((to, from) => {
	// 进度条结束
	NProgress.done()
	// to：即将进入的目标路由对象
	// from：当前导航正要离开的路由对象
	document.title = to.meta.title as string
})
export default router
